import 'package:dio/dio.dart';
import './config.dart';

final dio = Dio();

class HttpRequest {
  static final BaseOptions _baseOptions = BaseOptions(
      baseUrl: HttpConfig.baseUrl, //内容类型
      contentType: 'application/json;Charset=UTF-8',
      headers: {'cookie-id': 'd0e0adeb0ad208e9b94c9fdc7d12232e'},
      //响应数据类型：Json
      responseType: ResponseType.json);

  static final Dio _dio = Dio(_baseOptions);

  static Future<MyData> get(String url, {params}) async {
    final response = await _dio.get(url, queryParameters: params);
    Map<String, dynamic> jsonData = response.data;
    MyData myData = MyData.fromJson(jsonData);
    return myData;
  }

  static Future<MyData> post(String url, {params}) async {
    try {
      print('请求');
      final Response response = await _dio.post(
        url,
        queryParameters: params,
      );

      // 检查响应状态码
      if (response.statusCode == 200) {
        // 把获取到的请求data取出
        Map<String, dynamic> jsonData = response.data;
        // 使用class类的方法把map数据转换为class，这样就可以通过.语法访问了
        MyData myData = MyData.fromJson(jsonData);
        return myData;
      } else {
        // 捕获并处理异常
        print('Error during POST request: $response');
        // 处理状态码不为 200 的情况
        throw Exception('Failed to load data');
      }
    } catch (e) {
      // 捕获并处理异常
      print('Error during POST request: $e');
      // 返回一个默认的 MyData 对象或者抛出一个自定义异常
      throw Exception('Failed to load data');
      // throw MyCustomException('Failed to make POST request'); // 抛出自定义异常
    }
  }
}

// 处理jsonMap数据的方法
class MyData {
  int code;
  Map<String, dynamic> data;
  String message;

  MyData({required this.code, required this.data, required this.message});

  factory MyData.fromJson(Map<String, dynamic> json) {
    return MyData(
        // Map数据值可以通过[]方式访问，这里通过[]访问数据，再赋值给class，就可以通过.访问
        // 注意：只是这个设置的属性可以.访问，里面的属性还是Map类型的话，还是需要[]访问，除非再写处理的方法，把使用Map数据赋值给class
        code: json['code'],
        data: json['data'],
        message: json['message']);
  }
}
